package com.cskaoyan.javase.array.initialization3;

/**
 * @description: 数组的初始化
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 同样还是类比变量的初始化：
 *  int a = 3;
 *  开辟空间去存放数据，赋值
 *  数组也是类似的
 *  int[] arr1;
 *  我现在已经知道数组的数据类型了，要想去开辟空间还少什么东西？
 *  长度
 *  *  赋值
 *
 * 数组初始化的语法：
 *  1，静态初始化：
 *  语法： 数组名 = new 数据类型[]{元素1,元素2,元素3...};
 *  静态初始化，数组中没有任何元素，代表数组的长度是0
 *  这种初始化没有直接说多长，但是隐式的给出了，系统会自动得到长度
 *  赋值是我们自己做的
 *
 *  2，动态初始化
 *  语法： 数组名 = new 数据类型[数组长度];
 *  动态初始化中的数组长度必须要给出，不写不行
 *  这种初始化长度是我们直接给出的
 *  赋值是由系统帮助我们完成，默认初始化
 *
 * 3，除了上述两种初始化方式，其余的奇思妙想全是错的
 * 不能够既动态又静态
 *
 * 4，数组的最大特点：
 * 数组的长度一旦初始化结束就不能变化了，固定了，死了
 * 数组对内存空间的要求特别高，必须是连续的空间
 * 内存的分配也是有规划，Java不允许数组扩容
 * 这其实是Java的一种安全机制
 *
 * Java的集合体系中有一个类叫做ArrayList底层就是数组实现的，它是可以自由扩容的，但是实际上底层实现是把老数组中的元素全部拷贝到一个新创建的数组中
 *
 * 通过我说的这个ArrayList
 *
 * 启示：如果你要用数组装数据，严格考虑会装多少元素，如果数组长了浪费空间，短了更不行放不下
 *
 * 5，我们一再强调内存分配，开辟空间
 * 分配的是虚拟机jvm的内存
 *
 *
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        /*//声明数组
        int[] arr1;
        //静态初始化数组
        arr1 = new int[]{1,2,3};*/
        //合成一步
        int[] arr1 = new int[]{1,2,3};
        //更进一步简单
        int[] arr2 = {1,2,3}; //这个比较常用

        //动态初始化数组
        int[] arr3 = new int[3];

        //动态和静态一起使用
        //int[] arr4 = new int[3]{1,2,3};




    }
}
